目录

数据分析课程 01

https://www.bilibili.com/video/av35553678?p=6

1.使用jupyter notebook进行数据分析
2.jupyter matplotlib&numpy&pandas 库的入门&使用
3.Other 学习&复习&提高

为什么要学习数据分析

数据分析

1.从一堆数据中找到规律
2.找到规律并应用
3.图表化的展示&输出
summary 从数据中找到规律供用户使用

为什么学习数据分析

1.岗位需求
2.python数据科学的基础
3.机器学习课程的基础

前段js可以做到数据展示
后端数据库用于数据源的存储
数据分析用于二者的链接

模块用于高效的分析数据

image.png

数据分析的流程

20200114223027.png

1.数据分析问题一般不怎么清晰
分析问题
2.准备数据
读取数据
数据清洗
筛选和排除无效数据
3.分析数据

4.获得结论
→直接返回报告

5.结果可视化
图形图表可视化


2020年1月14日Unknow Timekey

样例1 1.png

In [ ]:
from matplotlib import pyplot as plt
x = range(2,26,2)

y = [15,13,14,17,20,26,25,27,24,22,18,15]
plt.plot(x,y)
plt.show()

2.png

设置图片大小
4.png fig = plt.figure(figsize = (20,8),dpi = 80)
figsize 元组
图片的保存要在绘图ploy命令之后,这样才能得到对应的图片
plt.savefig("path/filename.png")

调整图片的刻度值

plot.xticks(range(2,25)) 调整xticks()中的数组以改变坐标轴密度
不显示就不传值
5.png 格式化x轴坐标及显示 6.png

In [ ]:
print(["10点{}分".format(i) for i in range(60)])
# 定义元组

7.png

2020年2月4日22:34:15

数据分析基础 02

1.matplotlib 设置中文字体

8.png

先查看系统支持的中文字体

常用的Linux 命令 TOP 20之一 fc-list 查看系统支持的字体

使用matplotlib.rc 方法修改
查看源码的方式
**font相当于直接引用列表中的参数

或者通过 font manager类来修改

14:05

2020年2月8日15:13:18

解决中文不显示的问题 P6 11.05
看源码 修改Demo
设置字体的一种绝对有效的方法
10.png


P6 End
P7 Start


添加Label标签

通过Label标签给图表添加备注

plt.xlabel("text") → 添加X轴标签 plt.ylabel("text") → 添加Y轴标签 plt.title("title") → 添加图表标题


练习

图表绘制练习


P8


anaconda的安装

安装包的获取

环境的配置&conda命令使用
模块的应用及配置

python 环境的创建
conda create -n python3.2 python=3
切换python环境
source activate python3 判断python版本 pip --version

sh脚本里面切换python环境
前面添加 source activate python3

完成示例

Plot绘图
调用字体
绘制label

绘制网格线

plt.grid()
以坐标轴作为网格

网格的参数

alpha = 0.4 range 0~1 参数含义为透明度

绘制双折线图

两条折线
调用两次plot方法
Plot(x,y,label = "tuli1") plot(x,z,label = "tuli2")
多个参数的标记
在绘制的同时加Label标签

plt.legend() 增加图例 增加字体 添加Prop=My_font参数

legend  英[ˈledʒənd]
美[ˈledʒənd]
n.  传说; 传奇故事; (尤指某领域中的) 传奇人物; (地图或书中图表的) 图例,说明,解释;
[例句]The play was based on Irish legend.
这部戏取材于爱尔兰传说。
[其他]    复数:legends


2020年2月9日16:07:30

2020年2月9日16:11:32

legend()参数的使用
通过查看源码确定其位置
查看源码可以快速解决问题
查看源码定义其图例的位置 legend(...,loc = "upper left")

定义双折线图的颜色

定义上折线图的线条样式

linestyle
可以定义在折线图,也可以定义网格线(的样式)

PPT Page 31

可以利用颜色的十六进制代码来定义(具体代码可以百度)

在图表中添加文本注释 (备注内容)

在图表中添加自定义水印内容

总结

PPT page 34

matplotlib的其他功能 → 其官方文档 去官网查看对应的图形,点击即可获取到对应的源码
官方demo

常见图形的使用范围及功能

PPT Page 36

2020年2月9日17:26:26

直方图和条形图用于连续型&离散型数据的统计
散点图用于展示离群点(异常值)
11.png
12.png
13.png

Video p9-01 绘制散点图

plt.scatter(x,y)

绘制并调整散点图
设置图形格式等参数
x[::3] 取步长

散点图的更多应用场景

最小二乘法 获取拟合直线

绘制条形图

plt.bar() 绘制条形图的方法
坐标轴显示不完整
bar(...,width = 0.3)
控制条形图的宽度

绘制横着的条形图

2020年2月9日21:34:08 利用Python进行可视化的处理和操作
barh(...,height = 0.3)

2020年2月9日22:26:42

Video p=11 Public Upload github

2020年2月10日20:14:29

条形图的更多应用场景

频数统计(频率)
Other

直方图的绘制

展示连续的数据的分布情况
plt.hist(a,num_bins)
a为统计的原始数据
num_bins为定义的组数

ppt page 47

怎么确定直方图的组数

利用数学统计方法来确定组数=极差/组距
科学的设置组距
num_bins 可以传入一个数组来定义直方图不同的组距

绘制频数分布直方图

page47.py

绘制频率分布直方图

增加hist的参数 normed = true 用来绘制频数分布直方图
绘制直方图同时倾向于添加网格,用于确定组距

ppt page 48

那些数据能直接绘制直方图

plt.hist() 方法能通过原始数据来得到直方图
不能通过统计之后的数据得到直方图
可以使用绘制条形图的方法进行绘制

interval    英[ˈɪntəvl]
美[ˈɪntərvl]
n.  (时间上的) 间隔,间隙,间歇; (戏剧、电影或音乐会的) 幕间休息,休息时间; (其他事情) 穿插出现的间隙;
[例句]The ferry service has restarted after an interval of 12 years
时隔12年之后,轮渡服务又重新开通了。
[其他]    复数:intervals

怎么讲条形图连到一起

调整X轴及组距绘制直方图 → 自行探索

直方图的更多应用场景

PPT Page 50 Video P = 12

2020年2月10日22:34:27

2020年2月12日10:42:27

matplotlib 常用方法总结

PPT Page 51

Matplotlib 使用问题总结

PPT Page 52

1.明确问题
2.准备图形的呈现方式
3.准备数据
4.绘图和图形完善

Matplotlib更多图形样式

参考官方文档

使用前段的框架来绘图

eg. baidu.echart 炫酷的图形示例模板
有交互的效果,动态 js工具
需要只用制定格式的原始数据来套用模板即可
使用pandas和Numpy来整理数据
关系图 表示各个点之间的联系

Plotly 可视化工具中的github

官网选择Plot.ly 收费 与jupyter notebook兼容,利用jupyter来绘图
动态图表

seaborn 和Matplotlib差不多

静态图表

Matplotlib 模块End

下个模块Numpy video P= 13

2020年2月12日11:36:07

https://www.bilibili.com/video/av35553678?p=14

numpy的学习

video 15 & 14 顺序相反
PPT page 55

简介

numpy用于处理数值型数据
快速 方便
科学计算的基础库
多用于大型和多维数组中的运算
数组:python中的列表&数学含义的矩阵&其他语言中的数组

通过numpy创建数组

import numpy as np
直接导入numpy库,但是库名太长,后面程序调用不变,则使用np代替numpy
numpy的数据类型为ndarray类型
np.array(range(10)) === np.arange(10) 生成一个长度为10的数组
可以定义起始和步长 方法和range相同
a.dtype 当前数组中存放的数据的数据类型

numpy中常见的数据类型

ppt page 59

多了个complex(复数)类型
可以指定数据类型
a.array([1,2,3,4,5],dtype="int8")
调整数据类型
t6= t5.astype("int8")

PPT page 60

random.random() for i in range(10) 保留指定位数的小数
np.round(a,2)
生成指定位数的随机小数

import random
"%.2f"%random.random()
>> 0.78

2020年2月12日12:15:54

2020年2月12日19:49:14

Numpy 中数组的形状

Numpy中数组的形状表示矩阵的行列数
15.png
多维数组 行 列 块
修改数组的形状
a.reshape(b,c) → 将a数组转为b行c列的数组
16.png
三维数组修改形状为a块b行c列
17.png
存在更高维度的数组,但是一般将其转换为二维数组处理
有返回值的方法一般不改变原始变量
这个与列表(list)中的extend方法&字典中的Update方法不同,后者往往会改变返回的原始变量
18.png
将元组转化为一维数组
注意(1,24)和(24,)的区别
19.png
t5.shape[0] → t5对应的行数
t5.shape[1] → t5对应的列数
t5.flatten() → t5按行展开为一维数组
20.png
官方文档中需要传入一个元组,急用()包含,其实直接输入数字也行

PPT Page 62

数组的计算

数组相加&Numpy中的广播机制
数组的计算类似于矩阵的计算,可以进行加减乘除
数组除零会出warning 数据类型为nan Inf 0/0为nan → not a number 数字/0为inf → infinite 无限

数组在某一维度上相同时,就可以进行计算
21.png

2020年2月12日22:09:19

P = 16

2020年2月13日10:03:22

numpy中的轴 axis

相当于矩阵的向量

PPT Page 69

二维数组的轴 0表示行 1表示列 三维数组的轴 0表示块 1表示行 2表示列
二维和三维数组轴不同

numpy读取本地数据

一般不使用numpy读取数据,多使用pandas来读取数据,其功能更多 、 读取csv格式的文件

PPT Page 73

np.loadtxt()

PPT Page 74 numpy读取csv文件
filepath  = "filepath"
np.loadtxt(filepath,delimiter = ",",dtpye  = "int")    

unpack 参数True表示数据的行列转置

Numpy中二维数组的转置

t2.transpose() → 转置 方法
t2.T → 转置 属性
t2.swapaxes(1,2) → 交换轴

数据分析思路

1.确定分析目的
2.确定呈现方式
3.确定数据处理方式
4.写代码

Numpy中的索引和切片 常用

video P=17

取出数组中制定的行或列
除过Xpath 下标不是从零开始,其余索引均为从零开始

page74.py
取特定的行 
取连续的行  
取不连续的多行   
取列   
取连续的多列   
取不连续的多列   
取多行&多列
取制定的行和列的位置 
取多个不相邻的点 
取行和列交叉点的数据  
    方括号的区别    


尾数取不到

Numpy中数值的修改

PPT Page 79

先取到对应位置的数,在进行赋值
方括号可以对数组中的元素进行索引和切片
numpy中的布尔索引
22.png

Numpy中的三元运算符

np.where()

PPT Page 81

numpy中的clip(裁剪)
nan为float类型的数

numpy中的nan和inf

PPT Page 83

数据缺失会产生nan
不合适的计算如无穷大减无穷大也会产生Nan inf 无穷大 存在负无穷大
二者的type类型均为float

nan中的注意点

判断数组中nan的个数

np.count_nonzero(t2 != t2)
np.isnan(t2)
t2[np.isnan(t2)]=1
np.sum  #数组求和   

nan与任意数运算结果均为nan
将nan替换为均值/中值 直接删除该行

numpy 中的常见函数

ppt page 86
求和 
中值  
最大值 
最小值 
极值  
标准差  

计算统计参数是指定一个轴按行或按列计算

将nan替换为该行数的均值

23.png

小结

25.png
24.png 练习

Video = 22

数组的拼接

Video p=19 ppt page 91

竖直拼接&水平拼接
np.hstack() 水平评价
np.vstack() 竖直拼接
数组的行列变换
类似于交换赋值 PPT page 93
构造全为零的数组
np.zeros(a,b) → 构建a行b列的全为零的数组

Other

2020年2月13日11:37:44

2020年2月13日15:42:43

2020年2月13日14:05:04

numpy更多更好用的方法

video p=20

创建全为零|一的数组np.zeros/ones
创建一个对角线为1的方针
获取最大值和最小值的方法及位置

numpy生产随机数

生成平均分布和正态分布的随机数 np.random.randint(0,20,(2,4))

PPT Page 96~97

产生随机种子
保证生成的相同的数
常用的为randint和seed方法

numpy中的copy和view

复制和视图

PPT Page 98

全拷贝和部分拷贝

2020年2月21日22:19:58

Pandas 入门

PPT Page 100

数据中包含多种结构的数据,(比如数值型和字符型的数据),则需要用Pandas对数据进行预处理
使用Pandas处理非数值型数据,使用Numpy处理数值型数据

通过源码安装模块

在模块pypi网站上可以下载到.whl对应安装包和.tar.gz格式的压缩包文件
.whlcmd命令该目录下直接使用pip install 安装
.tar.gz格式的安装包
1.下载之后解压,得到压缩包内的setup.py
2.使用python setup.py install 来安装对应模块

Pandas 数据类型

series 一维的带标签的数组
标签表示数组的索引
可以手动给索引赋值

创建Series

1.手动创建
pd.Series([1,2,3],index = list("adc"))
2.通过字典来创建
pd.Series(dict)
键值对转化为索引和值的序列

Series的类型和修改类型

Series的类型和Numpy类似,有int,float和object区分
使用astype来相互转化
t2.astype(float)

Series的切片和索引

根据索引对Series进行切片,取出对应的值
直接取Series中对应的值
取连续和不连续的值
布尔索引
如果Series中没有对应的值,则返回NaN

Serise的一些属性

index
value
其属性可遍历,可迭代
获取长度,获取其中的数据,可以强制转化为list
series也有where方法,但其方法和Numpy中有区别

PPT Page 106
Video P = 23 End

2020年2月23日14:52:18

使用Panda读取外部数据

读取csv的方法

import pandas as pd

df = pd.read_csv("csv_path")  #引号内填入csv的路径
print(df)

pandas支持读取的数据源
使用方法百度

pd.read_csv
pd.read_clipboard
pd.read_html
pd.read_json
pd.read_sql
pd.read_sql_query
pd.read_sql_table
...

读取MongoDB

from pymongo import MongoClient
import pandas as pd

client = MongoClient()
collection = Client["douban"]["tv1"]
data = list(collection.find())

t1 = data[0]
t1 = pd.Series(t1)
print(t1)

PPT Pge 108

pandas中的DataFrame

二维的DataFrame是Series的容器
竖着的一列为Index 横的的为columns
对应列索引和行索引(0轴和1轴)

讲arange对象传入DataFrame

t1 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("123"),columns=list("abcd"))

将字典传入DataFrame

d1 = {"name":["Tom","Jerry"],"age":[22,23],"tel":[123,456]}

字典的键作为DataFrame的列缩影
字典的值若确实,则显示为NaN

Pandas中数据的处理

PP Page = 112 Video = 26

遍历数据

DataFrame的各种属性

t3 = t2.index
t4 = t2.columns
t5 = t2.values
t6 = t2.dtypes
t6 = t2.ndim  数据的维度    

DataFrame的其他方法

t2.head(1)  默认显示前五行    
t2.tail()  显示后五行   
t2.info()  显示相关信息  
t2.describe()  显示相关统计信息

DataFrame中排序的方法
True代表升序,False代表降序 df.sort_values(by = "LotID",ascending=False) #按照某一列进行排序

DataFrame的切片和索引(取行和取列的操作)

panda取行或者取列的注意事项
方括号取数字表示对行操作,字符串表示对列进行操作

loc方法

取特定的值

t1.loc["1","b"]   #直接使用呢方括号取值和取列    

取特定的行

t1.loc["1"]
t1.loc[:,"b"]
t1.loc["1",:]

取特定的多行

tl.loc 通过标签来获取多行

冒号在loc方法中时闭合的,括号内是可以选中的

t1.loc[["2","3"]]   #两个方括号
通过位置来获取多行
t1.iloc[:,2]
t1.iloc[:,[2,1]]

获取后也可以进行赋值

Video End P=28
In [ ]:
import pandas as pd
import numpy as np

t1 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("123"),columns=list("abcd"))

d1 = {"name":["Tom","Jerry"],"age":[22,23],"tel":[123,456]}  #定义一个字典
t2 = pd.DataFrame(d1)
t3 = t2.index
t4 = t2.columns
t5 = t2.values
#print(t2,"\n",t3,"\n",t4,"\n",t5)
t6 = t2.ndim
t7 = t2.describe()

df = pd.read_csv("data.csv")
df.head()
df.sort_values(by = " AreaNo",ascending=True)   #按照某一列进行排序  True代表升序,False代表降序
#print(df[2:21][" AreaNo"])
#print(df[2:21])
#print(df[2:3])
t1
t1.loc["1","b"]   #直接使用呢方括号取值和取列   
t1.loc["1"]
t1.loc["1",:]
t1.loc[["2","3"]]
t1.iloc[:,2]
t1.iloc[:,[2,1]]


print(df.Recipe.str.split(".").tolist())

2020年2月23日20:27:20

Pandas 中的布尔索引

df[df["a"]>30]   #单个条件

多个条件使用&符号链接
&表示且 |表示或

PPT Page 118
df[(df["a"]>30)&(df["a"]<40)]   #单个条件

pandas中字符串的相关方法

print(df.Recipe.str.split("."))
OOT Page 118 字符串的相关处理方法

Pandas中缺失数据的处理

回顾:Numpy中缺失数据(nan)数据处理

排除nan项目,并使用平均值来填充

缺失数据分类:NaN | 0

NaN

isnull()/notnull()方法判断为NaN

t3[pd.notnull(t3["W"])]     #布尔索引  选中True的该行      

删除NaN数字
方法dropna() inplace参数就地修改
爬虫爬取的数据通常会存放于MongoDB中,因为空值可以被填充
MySQL中无法存入空值,只能放入Null

0

使用布尔索引将0值替换为NaN,使其不参与运算

In [2]:
import pandas as df
from matplotlib import pyplot as plt
filepath  = "data.csv"

df = df.read_csv(filepath)
#print(df.head(3))
#print(df.info())

#展示数据的分布情况→  连续数据的统计:直方图     
#准备数据   
#data = df[" AreaX"]     #一个series类型的数据    
data  = df[" AreaX"].values    #ndarray 多维数组类型    
max_data = data.max()
min_data = data.min()

#计算组数
num_bin = (max_data - min_data)//100      
# 设置图形的大小
plt.figure(figsize=(20,8),dpi=80)
plt.hist(data,num_bin)
plt.xticks(range(max_data,min_data,5))
plt.show()
#max_data


'''
#解决横轴不能展示小数界别的问题   
_x = [min_data]
i = min_data
while i<= max_data:
    i = i + 500
    _x.append(i)
    
print(_x)
'''
### 解决制定分组的问题    
[-1130, -630, -130, 370, 870, 1370]

2020年2月24日20:13:23

练习 统计电影的Rating和Runtime的分布情况

PPT Page 124 Video P=29 Video Time = 21.48

报错信息

Bins must be increase monotoniclly 组数必须单调递增

2020年2月25日22:47:18

联系 获取多部电影的评价评分和导演等相关信息

video p = 11

1.将重复的项目转化为list,统计列表的长度
df.["a"].unique() 获取a列表中的唯一的值,去除重复项
.str.split(",").tolist() 多次for in 循环

复杂文本信息的获取与处理

2020年2月26日21:36:20

获取电影的分类情况

单一字符串的分隔与处理

数据分析:分类字符串中以逗号分隔,存储电影的具体分类信息
同一电影可对应多个分类情况

str.split(",")tolist()的优化

构造一个全为0的分类数列,若出现重复值,将重复值标记为1 30.png 26.png 统计分类情况即计算对应项目1的个数,使用简单的求和就可以办到 27.png 完成对应转化 28.png 通过sum求和完成对应统计
排序画图→条形图
29.png

Video p=31

数据合并之join

PPT Page 127

两个不同行列的数组之间的合并

数据合并之merge

通过内链接(按列合并)进行数据合并

PPT Page 128

2020年2月29日11:06:03

数组合并join方法

join 把行索引相同的项目合并在一起

Pandas中的分组与聚合

MongoDB中的分组与聚合

PPT Page 130

打开数据,查看前几项数据和数据Info,获取数据的基本信息

Pandas中的分组方法 groupby

df.groupby(by = "group_name")
返回dataframegroupby的一个对象

可以进行的操作

1.遍历
分组之后的对象可以迭代,其类型为一个元组
前面是个标签 后面的值为一个dataframe
通过循环来遍历groupby对象
2.调用聚合的方法
grouped["brand"].count()
中位数,平均值都能进行统计
常见的聚合方法 PPT Page 132

Video P = 31 End

分组与聚合 PPT Page 132

数据按照多个条件进行分组

返回带有两个索引的series数据

Video P=34 09.25

2020年3月1日10:12:03

PPT Page 135

数据按多个条件分组,返回Dataframe

32.png 在Brand前多加一个方括号
方括号嵌套表示取多列,会返回Dataframe对象
两个索引的索引称为复合索引

Pandas中索引和复合索引相关

PPT Page 136

获取index
给index重新赋值df.index/df.reindex
指定某一列为index df.set_index()
其中包含drop参数 index是可迭代对象,所以求长度,转化为列表

复合索引的处理

可以通过groupby方法或者index赋值得到复合索引

复合索引的操作

PPT Page 36

复合索引的取值
内外两层index,可以通过swaplevel之后在取值

练习 绘制条形图 bar

今日总结

PPT Page 36 36.36“

2020年3月3日22:57:35

day05总结
33.png
34.png

Video P=37 PPT P=142

2020年3月4日21:09:38

对csv中的数据通过逗号进行分割,然后提取有效的信息
Dataframe对象提取指定列转为series, 通过Split方法切割后,tolist方法转化为list

提取对应列的特定元素

然后构造全为0的数组,通过布尔索引进行选择性的遍历

提高提取效率的方法

算法优化,使用短的条件进行遍历

Pandas中时间序列相关

生成一段时间范围

PPT Page 144~145

在Pandas中使用时间序列

将时间字符串转为时间序列
使用format参数格式化字符串

Video P = 38

2020年3月8日16:29:43

DataFrame中使用时间序列

Pandas重采样

升采样&降采样
增加采样的样本数量
df.resample

PPT Page 147

时间字符串的转化

Closed @ 2020年3月8日20:57:01